iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

30天導讀 Python Software Foundation 官方翻譯文件系列 第 10

Day 9 -深入了解流程控制~導讀 Python Software Foundation 教學文件

  • 分享至 

  • xImage
  •  

本文為 Python Software Foundation -->Python 3.12.6 說明文件 -->Python教學文件 --> 4. 深入了解流程控制 -->4.8. 深入了解函式定義 -->4.8.4. 任意引數列表 (Arbitrary Argument Lists)4.9. 間奏曲:程式碼風格 (Coding Style) 繁體中文版導讀文章

  • 內容為官方文章搭配 Colab 實測 demo 圖片,想了解實測請點擊Colab

續上篇

深入了解流程控制

4.8. 深入了解函式定義

定義函式時使用的引數 (argument) 數量是可變的。總共有三種可以組合使用的形式。

4.8.4. 任意引數列表 (Arbitrary Argument Lists)

有個較不常用的選項,是規定函式被呼叫時,可以使用任意數量的引數。這些引數會被包裝進一個 tuple 中(詳見 Tuples 和序列 (Sequences))。在可變數量的引數之前,可能有零個或多個普通引數:

def write_multiple_items(file, separator, *args):
file.write(separator.join(args))

通常,這些 variadic(可變的)引數會出現在參數列表的最末端,這樣它們就可以把所有傳遞給函式的剩餘輸入引數都撈起來。出現在 *args 參數後面的任何參數必須是「僅限關鍵字」引數,意即它們只能作為關鍵字引數,而不能用作位置引數。
https://ithelp.ithome.com.tw/upload/images/20240924/201626731ZiEX0aXTQ.png

4.8.5. 拆解引數列表(Unpacking Argument Lists)

當引數們已經存在一個 list 或 tuple 裡,但為了滿足一個需要個別位置引數的函式呼叫,而去拆解它們時,情況就剛好相反。例如,內建的 range() 函式要求分開的 start 和 stop 引數。如果這些引數不是分開的,則要在呼叫函式時,用 * 運算子把引數們從 list 或 tuple 中拆解出來:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673sLsdPVboN7.png

同樣地,dictionary(字典)可以用 ** 運算子傳遞關鍵字引數 **:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673wTt4Wk5HpI.png

4.8.6. Lambda 運算式

lambda 關鍵字用於建立小巧的匿名函式。
lambda a, b: a+b 函式返回兩個引數的和。Lambda 函式可用於任何需要函式物件的地方。在語法上,它們被限定只能是單一運算式。在語義上,它就是一個普通函式定義的語法糖 (syntactic sugar)。與巢狀函式定義一樣,lambda 函式可以從包含它的作用域中引用變數:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673zvvFllECJB.png

上面的例子用 lambda 運算式回傳了一個函式。另外的用法是傳遞一個小函式當作引數:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673oDAhXKjws5.png

4.8.7. 說明文件字串 (Documentation Strings)

以下是關於說明文件字串內容和格式的慣例。

第一行都是一段關於此物件目的之簡短摘要。為保持簡潔,不應在這裡明確地陳述物件的名稱或型別,因為有其他方法可以達到相同目的(除非該名稱剛好是一個描述函式運算的動詞)。這一行應以大寫字母開頭,以句號結尾。

文件字串為多行時,第二行應為空白行,在視覺上將摘要與其餘描述分開。後面幾行可包含一或多個段落,描述此物件的呼叫慣例、副作用等。

Python 剖析器 (parser) 不會去除 Python 中多行字串的縮排,因此,處理說明文件的工具應在必要時去除縮排。這項操作遵循以下慣例:在字串第一行之後的第一個非空白行決定了整個說明文件字串的縮排量(不能用第一行的縮排,因為它通常與字串的開頭引號們相鄰,其縮排在字串文本中並不明顯),然後,所有字串行開頭處與此縮排量「等價」的空白字元會被去除。不應出現比上述縮進量更少的字串行,但若真的出現了,這些行的全部前導空白字元都應被去除。展開 tab 鍵後(通常為八個空格),應測試空白字元量是否等價。

下面是多行說明字串的一個範例:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673SdOHV3o4OM.png

4.8.8. 函式註釋 (Function Annotations)

函式註釋是選擇性的元資料(metadata)資訊,描述使用者定義函式所使用的型別(更多資訊詳見 PEP 3107PEP 484)。

註釋以 dictionary(字典)的形式存放在函式的 annotations 屬性中,且不會影響函式的任何其他部分。參數註釋的定義方式是在參數名稱後加一個冒號,冒號後面跟著一個對註釋求值的運算式。回傳註釋的定義方式是在參數列表和 def 陳述式結尾的冒號中間,用一個 -> 文字接著一個運算式。以下範例註釋了一個必要引數、一個選擇性引數,以及回傳值:
https://ithelp.ithome.com.tw/upload/images/20240924/20162673cERMAkMXHu.png


4.9. 間奏曲:程式碼風格 (Coding Style)

現在你即將要寫更長、更複雜的 Python 程式,是時候討論一下編碼樣式了。大多數語言都能以不同的樣式被書寫(或更精確地說,被格式化),而有些樣式比其他的更具可讀性。能讓其他人輕鬆閱讀你的程式碼永遠是一個好主意,而使用優良的編碼樣式對此有極大的幫助。
對於 Python,大多數的專案都遵循 PEP 8 的樣式指南;它推行的編碼樣式相當可讀且賞心悅目。每個 Python 開發者都應該花點時間研讀;這裡是該指南的核心重點:

  • 用 4 個空格縮排,不要用 tab 鍵。
  • 4 個空格是小縮排(容許更大的巢套深度)和大縮排(較易閱讀)之間的折衷方案。Tab 鍵會造成混亂,最好別用。
  • 換行,使一行不超過 79 個字元。
  • 換行能讓使用小顯示器的使用者方便閱讀,也可以在較大顯示器上並排陳列多個程式碼檔案。
  • 用空行分隔函式和 class(類別),及函式內較大塊的程式碼。
  • 如果可以,把註解放在單獨一行。
  • 使用說明字串。
  • 運算子前後、逗號後要加空格,但不要直接放在括號內側:a = f(1, 2) + g(3, 4)。
  • Class 和函式的命名樣式要一致;按慣例,命名 class 用 UpperCamelCase(駝峰式大小寫),命名函式與 method 用 lowercase_with_underscores(小寫加底線)。永遠用 self 作為 method 第一個引數的名稱(關於 class 和 method,詳見 初見 class)。
  • 若程式碼是為了用於國際環境時,不要用花俏的編碼。Python 預設的 UTF-8 或甚至普通的 ASCII,就可以勝任各種情況。
  • 同樣地,若不同語言使用者閱讀或維護程式碼的可能性微乎其微,就不要在命名時使用非 ASCII 字元。

上一篇
Day 8 -深入了解流程控制~導讀 Python Software Foundation 教學文件
下一篇
Day 10 -資料結構~導讀 Python Software Foundation 教學文件
系列文
30天導讀 Python Software Foundation 官方翻譯文件12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言